/************************************************************
 * Project Name         [Thinking_In_Java]
 * File Name            [Java_IO_File.java]
 * Creation Date        [07-Jul-2014]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ************************************************************/
package pkg_09_io.api;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

/**
 * java.io.File
 * 
 * @author 不落的太阳(Sean Yang)
 * @version 1.0
 * @since JDK 6
 * 
 */
public class Java_IO_File {

	/**
	 * 递归列出指定目录的所有文件
	 * 
	 * @param file
	 * @param filter
	 */
	public static void listFile(File file, FileFilter filter) {
		File[] files = file.listFiles(filter);
		System.out.println("文件总数: " + files.length);
		for (File otherFile : files) {
			System.out.println(otherFile.getName());
			if (otherFile.isDirectory()) {
				listFile(otherFile, filter);
			}
		}
	}

	public static void getFileInfo(String fileName) {
		// 用文件路径新建一个文件对象, 路径可以是绝对路径也可以是相对路径
		// 传入的参数被当作为文件的抽象路径
		File file = new File(fileName);
		// 获取文件的名字, 不包括路径
		System.out.println("文件名:\t" + file.getName());
		// 将抽象路径名中的文件分隔符用系统默认分隔符替换
		System.out.println("文件路径:\t" + file.getPath());
		// 获取文件的绝对路径
		System.out.println("绝对路径:\t" + file.getAbsolutePath());
		// 获取抽象路径名的父抽象路径
		System.out.println("父目录:\t" + file.getParent());
		System.out.println("文件是否存在:\t" + file.exists());
		System.out.println("是否可读:\t" + file.canRead());
		System.out.println("是否可写:\t" + file.canWrite());
		System.out.println("是否是隐藏文件:\t" + file.isHidden());
		System.out.println("是否是普通文件:\t" + file.isFile());
		System.out.println("是否是文件目录:\t" + file.isDirectory());
		System.out.println("文件路径是否是绝对路径:\t" + file.isAbsolute());
		System.out.println("文件路径的URI:\t" + file.toURI());
		System.out.println("文件最后修改时间:\t"
				+ new java.util.Date(file.lastModified()));
		System.out.println("文件大小:\t" + file.length() + " bytes");
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String separator = File.separator;
		String fileName = "title.txt";
		String directory = "resources" + separator;

		File file = new File(directory, fileName);
		if (file.exists()) {
			System.out.println(file.getName());
			System.out.println(file.getAbsolutePath());
		} else {
			file.getParentFile().mkdirs();
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		File listFile = new File("resources");
		Java_IO_File.MyFileFilter myFileFilter = new Java_IO_File().new MyFileFilter(
				"txt");
		listFile(listFile, myFileFilter);

	}

	/**
	 * 文件过滤器
	 * 
	 * @author 不落的太阳(Sean Yang)
	 * @version 1.0
	 * @since JDK 6
	 * 
	 */
	class MyFileFilter implements FileFilter {

		private final String suffix;

		public MyFileFilter(String suffix) {
			this.suffix = suffix;
		}

		@Override
		public boolean accept(File file) {
			return (!file.isDirectory() && (file.getName().endsWith(suffix)));
		}
	}

}
